﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsGame1
{
    public static class FparseXML
    {
        //-----------------------------------
        //Szukanie sekcji
        //-----------------------------------
        public static int szukajsekcji(string sh, byte[] bufor, int ibufor)
        {
            byte b; int i = 0, czytam = 0;
            string sekcja = null;

            while (ibufor < bufor.Length)
            {
                b = bufor[ibufor]; ibufor ++;
                if (b > 64)
                {
                    czytam = 1;
                    sekcja += (char)b;
                    i++;
                }
                else
                {
                    if (czytam == 1)
                    {
                        i = 0;
                        //Console.Write(sekcja+" ");
                        //Console.Write(sh+"\n");
                        if (string.Equals(sekcja, sh, StringComparison.OrdinalIgnoreCase))
                        {
                            return ibufor;
                        }
                        sekcja = null;
                        czytam = 0;
                    }
                }
            }
            return 0;
        }
        //-----------------------------------
        //Parsowanie liczby rzeczywistej
        //-----------------------------------
        public static float parsujr(byte[] bufor, ref int ibufor)
        {
            byte b = 0; int j;
            float x, t;
            int liczba = 1, ujemna = 0;

            while (b < 45 || (b > 45 && b < 48) || b > 57)
            {
                b = bufor[ibufor]; ibufor ++;
            }
            x = 0;
            liczba = 1;
            ujemna = 0;
            if (b == 45) { ujemna = 1; b = bufor[ibufor]; ibufor ++; }
            while (b > 47 && b < 58)
            {
                x = x * 10 + b - 48;
                b = bufor[ibufor]; ibufor ++;
            }
            if (b == '.' || b == ',')
            {
                b = bufor[ibufor]; ibufor ++;
                while (b > 47 && b < 58)
                {
                    liczba = liczba * 10;
                    t = b;
                    x = x + (t - 48) / liczba;
                    b = bufor[ibufor]; ibufor ++;
                }
            }
            if (ujemna == 1) x = x - x - x;
            if (b == 'E' || b == 'e')
            {
                b = bufor[ibufor]; ibufor ++;
                if (b == '-') { ujemna = 1; b = bufor[ibufor]; ibufor ++; }
                else ujemna = 0;
                liczba = 0;
                while (b > 47 && b < 58)
                {
                    liczba = liczba * 10 + b - 48;
                    b = bufor[ibufor]; ibufor ++;
                }
                if (ujemna == 1) { for (j = 0; j < liczba; j++) { x = x / 10; } }
                else { for (j = 0; j < liczba; j++) { x = x * 10; } }
            }
            //ibufor -= 2;
            return x;
        }
        //-----------------------------------
        //Parsowanie liczby szesnastkowej
        //-----------------------------------
        public static int parsuj16(byte[] bufor, ref int ibufor)
        {
            byte b = 0, sb = 0;
            int x;

            while (((b < 48) || (b > 57 && b < 65) || (b > 70 && b < 97) || (b > 102)) || sb != 32)
            {
                sb = b;
                b = bufor[ibufor]; ibufor += 2;
            }
            x = 0;
            while ((b > 47 && b < 58) || (b > 64 && b < 71) || (b > 96 && b < 103))
            {
                if (b > 96) b = (byte)(b - 87 + 48);
                else { if (b > 64) b = (byte)(b - 55 + 48); }
                x = x * 16 + b - 48;
                b = bufor[ibufor]; ibufor += 2;
            }
            ibufor -= 2;
            return x;
        }
    }
}